草庐IT

Python float - str - 浮点怪异

全部标签

c++ - C和C++中的浮点运算差异

Closed.Thisquestionneedsdebuggingdetails。它当前不接受答案。想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。2年前关闭。Improvethisquestion解决方案感谢@MichaelVeksler的回答,我处于正确的位置以寻找解决方案。在此post中,@Christoph建议尝试使用不同的编译器标志来设置浮点运算的精度。对我来说,-mpc32标志解决了这个问题。我必须将C++代码转换为C代码,因为新目标将没有C++编译器。我遇到了一件奇怪的事情,在C程序中运行时,与在C++程序中运行时,数学方程式给出不同的结果。方程:f

c++ - 模板化代码中的浮点常量

我有一个对浮点参数进行操作的模板函数。该函数是模板化的,因此调用者可以使用float、double或任何其他float据类型。在我的代码中的某一点,我将一个值与零(或任何其他浮点常量)进行比较。我应该使用0.0还是0.0f进行比较?templatevoidf(Ta){//shouldIuse0.0or0.0finthefollowingline?if(a==0.0){}}虽然目前这不会造成任何问题,但我想知道通常的做法是什么。 最佳答案 我建议if(a==T(0))... 关于c++-模

c++ - 带大括号的 double 浮点初始化

为什么编译器(clang,gcc)在执行此操作时不警告缩小转换floata{3.1231231241234123512354123512341235123541235};floata={double(3.1231231241234123512354123512341235123541235)}我预计会收到警告,因为我使用大括号进行了显式值初始化。按照这个答案Link它应该吐出一个错误。Compilationhere 最佳答案 [dcl.init.list]/§7(标准草案)Anarrowingconversionisanimplic

c++ - 尝试转换 str 字符串以用于 std::getline 定界符

我正在尝试获取std::string值并将其用作std::getline()函数中的分隔符但无论我做什么,编译器都会给我错误。这就是我想要做的:std::stringstreamss(s);std::stringitem;std::stringdelim="&&=";intssize=delim.size();intnewssize=ssize+1;chardel[SSIZE];//alsoherewhenitrygiveserrorstrcpy(del,delim.c_str());char*delrr[1024]=delim.c_str();//giveserrorwhile(st

c# - 浮点加法 : loss-of-precision issues

简而言之:我如何执行a+b以便截断导致的任何精度损失远离零而不是接近零?长话短说我正在计算一长串浮点值的总和,目的是计算集合的样本均值和方差。由于Var(X)=E(X2)-E(X)2,足以维持所有数字的运行计数,即到目前为止所有数字的总和,以及到目前为止所有数字的平方和。到目前为止一切顺利。但是,绝对需要E(X2)>E(X)2,因为浮点精度不是情况总是如此。在伪代码中,问题是这样的:intcount;doublesum,sumOfSquares;...doublevalue=;doublesqrVal=value*value;count++;sum+=value;//slightlyr

c++ - 解决浮点舍入问题 C++

我开发了一个科学应用程序(模拟染色体在细胞核中的移动)。染色体被分成小片段,使用4x4旋转矩阵围绕随机轴旋转。问题在于模拟执行了数千亿次旋转,因此浮点舍入误差会叠加并呈指数增长,因此随着时间的推移,片段往往会“漂浮”并与染色体的其余部分分离。我在C++中使用double。该软件目前在CPU上运行,但将移植到CUDA,最多模拟1个月。我不知道如何以某种方式重新规范化染色体,因为所有片段都链接在一起(您可以将其视为双向链表),但我认为这是最好的主意,如果可能的话。你有什么建议吗?我觉得有点失落。非常感谢,H.编辑:添加了简化的示例代码。您可以假设所有矩阵数学都是经典实现。//Rotate1

c++ - 不,真的,浮点提升什么时候发生?

从这个其他QUESTION他们谈论BjarneStroustrup是如何说的,就像比int窄的整数数据类型(例如short)被提升为int,float被提升为double。但是,与int窄的积分扩展不同,浮点提升不会以相同的方式发生,而是发生在其他地方。我知道如果你要计算float+doublefloat会在二元运算符(+)被应用。但是,根据Learncpp.com,这不是浮点提升.这是通常的算术转换。浮点提升何时真正发生? 最佳答案 float有“float提升”之类的东西。至double根据[conv.fpprom]。Aprva

c++ - 浮点加法和乘法是关联的吗?

我在添加三个浮点值并将它们与1进行比较时遇到了问题。cout为什么这些值会不同? 最佳答案 浮点加法不一定是关联的。如果您更改相加的顺序,这可能会改变结果。关于该主题的标准论文是WhatEveryComputerScientistShouldKnowaboutFloatingPointArithmetic.它给出了以下示例:Anothergreyareaconcernstheinterpretationofparentheses.Duetoroundofferrors,theassociativelawsofalgebradonot

c++ - 浮点运算是否会导致 IEC 559/IEEE 754 浮点类型的无限未定义行为

我正在通读Infinitynotconstexpr,这似乎表明创建无穷大是未定义的行为:[expr]/4:Ifduringtheevaluationofanexpression,theresultisnotmathematicallydefinedornotintherangeofrepresentablevaluesforitstype,thebehaviorisundefined.但是,如果std::numeric_limits::is_iec559equalstrue,似乎给了我们更多的保证。下面的代码利用这个保证来创建一个无限的数字。在constexpr上下文中执行时,它会导致

C++,如何优化浮点算术运算?

我在x86架构上测试极限情况下的简单算术运算时观察到一个令人惊讶的行为:constdoublemax=9.9e307;//Nearstd::numeric_limits::max()constdoubleinit[]={max,max,max};constvalarraymyvalarray(init,3);constdoublemysum=myvalarray.sum();cout(在release模式下使用MSVC以及通过Codepad.org的gcc进行测试。MSVC的Debug模式将平均值(2)设置为#INF。)我希望平均值(2)等于平均值​​(1),但在我看来,C++内置除法